package cn.mujiankeji.mbrowser.界面.小窗页.管理

import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import cn.mujiankeji.mbrowser.数据.数据库.AppDatabase
import cn.mujiankeji.mbrowser.数据.数据库.DBWebsiteConfig
import cn.mujiankeji.mbrowser.界面.小窗页.文本编辑窗口状态
import cn.mujiankeji.mbrowser.界面.框架.小窗视图.小窗状态
import cn.mujiankeji.mbrowser.界面.组件.布局.IOS窗口布局
import cn.mujiankeji.mbrowser.界面.组件.配置列表.配置行_开关
import cn.mujiankeji.mbrowser.界面.组件.配置列表.配置行_提示
import cn.mujiankeji.mbrowser.界面.组件.配置列表.配置行_选项
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import org.koin.core.component.KoinComponent
import org.koin.core.component.inject
import org.koin.core.context.GlobalContext
import 界面.弹窗.下拉菜单
import 界面.弹窗.下拉菜单项目

/**
 * @param 主机名   http://www.baidu.com/xx --- 主机名是 www.baidu.com
 */
class 网站设置窗口状态(val 主机名: String,
    val 回调 : (DBWebsiteConfig) -> Unit) : 小窗状态(), KoinComponent {
    private val 数据库: AppDatabase by inject()
    var 配置 by mutableStateOf(DBWebsiteConfig(主机名 = 主机名))

    // 加载配置
    suspend fun 加载配置() {
        withContext(Dispatchers.IO) {
            数据库.网站配置().获取配置(主机名)?.let {
                配置 = it
            }
        }
    }
    
    // 保存配置
    fun 保存配置() {
        CoroutineScope(Dispatchers.IO).launch {
            数据库.网站配置().添加或更新配置(配置)
            回调(配置)
            销毁小窗()
        }
    }

}

@Composable
fun 网站设置窗口实现(state: 小窗状态) {
    if (state !is 网站设置窗口状态) return
    // 加载配置
    LaunchedEffect(Unit) {
        state.加载配置()
    }

    IOS窗口布局(销毁 = {state.销毁小窗()},
        提交 = {state.保存配置()},
        标题 = state.主机名)
    {
        LazyColumn(Modifier.fillMaxSize()) {

            // 页面的基本信息
            item {
                Column(Modifier.padding(horizontal = 10.dp)) {
                    Text(state.主机名, style = MaterialTheme.typography.bodyMedium)
                }
            }

            // ---
            item {
                配置行_提示("---")
            }

            // 标识 UA
            item {
                val dao = GlobalContext.get().get<AppDatabase>()
                    .UA标识()
                var 显示标识库 : Boolean by remember { mutableStateOf(false) }
                配置行_选项("UA标识",state.配置.UA){
                    下拉菜单项目("跟系统"){
                        state.配置 = state.配置.copy(UA = "")
                        it()
                    }
                    下拉菜单项目("UA标识库"){
                        显示标识库 = true
                        it()
                    }
                    下拉菜单项目("手动编辑"){
                        文本编辑窗口状态(state.配置.UA,{"ua"}){
                            it?.let {
                                state.配置 = state.配置.copy(UA = "")
                            }
                        }.显示()
                    }
                }
                下拉菜单(显示标识库,{显示标识库 = false}){
                    // todo 加载所有设定的UA
                }
            }

            // 暗色模式
            item {
                配置行_开关("暗色模式", state.配置.启用暗色模式) {
                    state.配置 = state.配置.copy(启用暗色模式 = it)
                }
            }

            // 电脑模式
            item {
                配置行_开关("电脑模式", state.配置.启用电脑模式) {
                    state.配置 = state.配置.copy(启用电脑模式 = it)
                }
            }

            // 无痕模式
            item {
                配置行_开关("无痕模式", state.配置.启用无痕模式) {
                    state.配置 = state.配置.copy(启用无痕模式 = it)
                }
            }

            // 无图模式
            item {
                配置行_开关("无图模式", state.配置.启用无图模式) {
                    state.配置 = state.配置.copy(启用无图模式 = it)
                }
            }

            // 脚本支持
            item {
                配置行_开关("脚本支持", state.配置.启用脚本支持) {
                    state.配置 = state.配置.copy(启用脚本支持 = it)
                }
            }

            // 用户脚本
            item {
                配置行_开关("用户脚本", state.配置.启用用户脚本) {
                    state.配置 = state.配置.copy(启用用户脚本 = it)
                }
            }

            // 翻译
            item {
                配置行_开关("自动翻译", state.配置.启用自动翻译) {
                    state.配置 = state.配置.copy(启用自动翻译 = it)
                }
            }

            // 第三方Cookie
            item {
                配置行_开关("允许第三方Cookie", state.配置.启用允许第三方Cookie) {
                    state.配置 = state.配置.copy(启用允许第三方Cookie = it)
                }
            }

            // 唤醒第三方APP
            item {
                配置行_开关("禁止唤醒第三方APP", state.配置.禁止唤醒第三方APP) {
                    state.配置 = state.配置.copy(禁止唤醒第三方APP = it)
                }
            }

            // 广告拦截
            item {
                配置行_开关("广告拦截", state.配置.启用广告拦截) {
                    state.配置 = state.配置.copy(启用广告拦截 = it)
                }
            }
        }
    }
}